import Decimal from "decimal.js";
export type Value = string | number | Decimal;
export class DecimalUtils {
    static decimal(value: Value) {
        return new Decimal(value);
    }
    static deAdd(x: Value, y: Value) {
        return Decimal.add(x, y);
    }

    static deCeil(x: Value) {
        return Decimal.ceil(x);
    }

    static deFloor(x: Value) {
        return Decimal.floor(x);
    }

    static deLog(x: Value) {
        console.log(x.toString());
    }

    static deSub(x: Value, y: Value) {
        return Decimal.sub(x, y);
    }

    static deGreaterOrEqual(x: Value, y: Value) {   // 大于等于
        return new Decimal(x).gte(y);
    }

    static dePlus(x: Value, y: Value) {
        return new Decimal(x).plus(y);
    }

    static deSqrt(x: Value) {
        return Decimal.sqrt(x);
    }

    static deSquare(x: Value) {
        return new Decimal(x).times(x);
    }

    static deTimes(x: Value, y: Value) {
        return new Decimal(x).times(y);
    }

    static deMul(x: Value, y: Value) {
        return Decimal.mul(x, y);
    }

    static deDividedBy(x: Value, y: Value) {
        return Decimal.div(x, y);
    }

    static dividedToIntegerBy(x: Value, y: Value) {
        return new Decimal(x).dividedToIntegerBy(new Decimal(y));
    }
    /**
     * x 的 y 次方
     * @param x 
     * @param y 
     */
    static dePower(x: Value, y: Value) {   
        return new Decimal(x).toPower(y);
    }

    static setExpPos(index: number) {
        Decimal.set({ toExpPos: index });
    }
    /**
     * 如果x大于y的值，则返回1;    
     * 如果x小于y的值，则返回-1;    
     * 如果x等于y的值，则返回0;    
     * 如果x或y的值为NaN，则返回NaN;
     * @param x 
     * @param y 
     */
    static comparedTo(x: Value, y: Value) {
        let x1 = new Decimal(x);
        let y1 = new Decimal(y)
        return x1.comparedTo(y1);
    }

}